"""
字符串
    有序，重复√，循环√，只能存储字符串，只读（修改只能得到新的字符串）
"""


# 1.定义：
s1 = '”单引号中包含双引号“'
s2 = "‘双引号中包含单引号hello’"
s3 = """三引号也是字符串"""
s4 = "\"内外都是双引号或者单引号需要转义\"" #双引号包含双引号 或者单引号包含单引号需要转义
s5 = r"D:\ majialu\大模型" # r 或R 忽略转义

# 2.增  (直接拼接；replace；split；join;splitlines；partition/rpartition;ljust/rjust/center；upper/lower/capitalize/title;startswith/endswith/isdigit/isalpha/isalnum/isspace)

#2-1字符串拼接 + *
s6 = "majialu" + "巫明瑾"
s7 = "HI" * 3
print(s6,s7)

s8 = "hello majialu "
s8 = 'H' + s8[1:]
print(s8) # Hello majialu


# 2-2 替换
print(s8.replace("majialu","马健茹"))  # Hello 马健茹

# 2-3 分割4  join;split;splitlines;partition
mystr = "Hello \n word"
print(mystr.splitlines())  # ['Hello','world'] 按行分割，返回列表


mystr2 = "Hello world ha yu ha duoge"

print(mystr2.partition("ha"),type(mystr2.partition("ha")))  # ('Hello world ', 'ha', ' yu ha duoge')  根据元素分割 成3部分,得到元组类型
print(mystr2.rpartition("ha"))  #('Hello world ha yu ', 'ha', ' duoge')  根据右侧的ha进行分割

s8 = "hello majialu"
print("*"*200)
print(s8.split(" ")) # ['Hello', 'majialu'] 将1个字符串按照分隔符（空格）拆分成列表
print(" * ".join(['Hello', 'majialu']))  # Hello * majialu 将列表连接成字符串
print("-".join("my")) # 每个元素后插入- m-y

# 2-4.原字符串使用空格填充至长度  ljust
mystr3 = "Hello"
print(mystr3.ljust(10))       # "Hello       "
print(mystr3.rjust(10))       #"     Hello"
print(mystr3.center(10))      # "  Hello   "

# # 2-5.大小写转换
print(s8.upper())       # 全大写 HELLO MAJIALU
print(s8.lower() )      # 全小写 hello majialu
print(s8.capitalize())  # 将字符串的第一个字符大写 Hello majialu
print(s8.title() )      # 每个单词首字母大写 Hello Majialu

# 2-6校验字符串中的元素
s10 = "  1 2 巫 明 瑾 2 1 "
print(s10.startswith("  1 2")) # True 以XX开头
print(s10.endswith(" 2 3 ")) # False 以XX结尾
print(s10.isdigit()) # False 全为数字
print(s10.isalpha())   # False 全为字母
print(s10.isalnum())    # 字母和数字
print(s10.isspace())    # 只含空格

# # 3.删  (删除空白格3;)

# 删除空白格3 strip lstrip rstrip

print(s10.strip())  # 1 2 巫 明 瑾 2 1;去除两端的空白格
print(s10.lstrip())  # 去除左端空白格
print(s10.rstrip())  # 去除右端空白格


# # 疑问：去除12 和21 去除前后指定字符串
# # 4.改(字符串不可变性，修改只会生成新的字符串)

# # 5.查(索引与切片,find,rfind,index,rindex,in,count)

# 索引与切片
s8 = "Python"
print(s8[0])    # P
print(s8[-1])   # n
print(s8[2:5])  # tho（左闭右开）
print(s8[::2])  # Pto（步长为2）
print(s8[:])    # Python


#  find 返回索引值 index
print(s8.find('n',1,3) ) # 返回子串首次出现的索引，未找到返回-1
# print(s8.index('sub'),1,3)  # 未找到回报错：ValueError: substring not found

# print(s8.find('th') ) # 返回首次出现的索引 2
# print(s8.index('th'))  # 返回首次出现的索引 2
# print(s8.rfind('th'))   # 从右边开始查找
# print(s8.rindex('th'))  # 从右边开始查找

# #  in
# print("th" in "python") # True

# #11. 数量
# print(s10.count("2"))  # 2
# print(s10.count("2"),1,3)  #区间左闭右开

# # 字符串比较大小：一位位进行对比，只要有一位大，整体就大
# print(f'{"abd" > "abc" > "a"}')  # True
# print(f'{"A" == "a"}')  # False
# print(f'{"key2" > "key1"}')  # True



# # 13.格式化
# print(f"格式化方式1：{s10},{s8}")
# print("格式化方式2：{},{}".format(s10,s8))
# print("格式化方式3：%s,%s"%(s10,s8))

#     #打印不换行 end=' '
# print("马嘉璐",end='')
# print("巫新",end='') #打印结果：马嘉璐巫新

#     # 换行符 \n 空格\t
# print("\n巫\t新")

# # 16. input 得出的是字符串类型
# # num1 = input("获取键盘输入整数信息：")
# # print(f"打印出来键盘输入的int信息,需要转成str:{str(num1)}")

# # 14. str和字节的转换
# s11 = s10.encode("utf-8") # 转成字节
# print(s11)
# print(s11.decode("utf-8")) # 转回字符串

# # 15.循环
# str1 = " 12majialu majianru wumingjin wuxin21 "
#  # 有多少a? 将空格都替换成"|"； 按照"|"分割得到列表；
# print(str1.count("a"))
# str3 = str1.replace(" ","|")
# list1 = str3.split("|")

# # 6.其他类型转

# （1）列表转字符串 -> 2
var_list = ["测试列表",10]

## 方式一：保留数据结构 str()
print(str(var_list))  # "['测试列表', 10]"

## 方式二：字符串拼接join()，列表内只能是字符串
print("".join(str(i) for i in var_list ))  # 测试列表10
print("-".join(str(i) for i in var_list ))  # 测试列表-10
print("-".join(map(str,var_list))) # 测试列表-10 问题分析

# （2）元组转字符串 -> 2
var_touple = ("测试元组",10)

## 方式一：保留数据结构 str()
print(str(var_touple))  # "('测试元组', 10)"

## 方式二：字符串拼接join()，列表内只能是字符串
print(" ".join(str(i) for i in var_touple)) # 测试元组 10
print("|".join(map(str,var_touple)))  # 测试元组|10

# （3）字典转字符串 -> 2
var_dic = {"测试":"字典","name":"majialu"}

## 方式一：保留数据结构 str()
print(str(var_dic))  # "{"测试":"字典","name":"majialu"}"

## 方式二：json格式化
import json
print(json.dumps(var_dic))  # {'测试': '字典', 'name': 'majialu'}

# （4）集合转字符串 -> 2
var_set = {"测试集合",10,1,10}
var_set2 = {30,4,10,1,10}

## 方式一：保留数据结构 str()
print(str(var_set))  # "{'测试集合', 1, 10}" 去重且无序

## 方式二：join()
print("-".join(map(str,var_set)))  # 1-10-测试集合, 得到的是无序的
print(" ".join(map(str,sorted(var_set2))))  # 1 4 10 30  先排序再拼接

















